//
//  AppDelegate.swift
//  SinaMicroBlog
//
//  Created by wxy on 15/9/1.
//  Copyright © 2015年 wxy. All rights reserved.
//

import UIKit
import AFNetworking

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        // 打印用户账户信息
        printLog(UserAccountViewModel.sharedUserAccount.userAccount)
//        setUpAppearanceBarColor()
        
        //注册通知 object - 监听由哪一个对象发出的通知 nil 监听所有对象发出的name通知
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "switchRootViewController:", name: SwitchRootViewControllerNotification, object: nil)
        
        setUpNetworkActivityIndicator()

        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        
        window?.backgroundColor = UIColor.whiteColor()
        
        window?.rootViewController = defaultRootViewController()
        
        window?.makeKeyAndVisible()
        
        UIApplication.sharedApplication().keyWindow?.tintColor = UIColor.orangeColor()
        
//        导航栏上主题（内容，不包含title）的颜色
//        UINavigationBar.appearance().tintColor = UIColor.redColor()
        
//        导航栏上带有渲染效果的Bar的颜色
//        UINavigationBar.appearance().backgroundColor = UIColor.redColor()

//        默认导航栏不透明
//        UINavigationBar.appearance().translucent = false
//        导航栏最真的背景颜色
//        UINavigationBar.appearance().barTintColor = UIColor.redColor()
        
        return true
    }
    
    // 注销通知
    deinit {
        
        // 这种方法可以注销指定名称的通知，程序销毁的时候才会调用，可以省略
        NSNotificationCenter.defaultCenter().removeObserver(self, name: SwitchRootViewControllerNotification, object: nil)
    }
    
    // 切换控制器的通知监听方法
    func switchRootViewController(notification: NSNotification) {
        
        printLog(notification)
        
        // OAuth验证 -> welcome newFeature -> Main welcome -> Main
        // 所以判断下通知要切换的控制器
        // 如果只是传递消息，post name
        // 如果传递消息同时，希望传递一个数值，可以通过“object”来传值
        // 如果传递消息的同时，希望传递更多的内容，可以通过“userInfo”字典来传递
        window?.rootViewController = (notification.object == nil) ? MainViewController() : WelcomeViewController()
        
    }
    
    private func defaultRootViewController() -> UIViewController {
        
        // 1.判断用户是否登录
        if UserAccountViewModel.sharedUserAccount.userLogin {
            
            // 2.如果登录，判断是否有新版本
            return isNewVersion() ? NewFeatureViewController() : WelcomeViewController()
        }
        
        // 3.如果没有登录，返回Main未登录界面
        return MainViewController()
    }
    
    private func isNewVersion() -> Bool {
        
        // 1.当前应用的版本号
        let bundleVersion = Double(NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String)!
        printLog("当前版本号 \(bundleVersion)")
        
        // 2.之前保存的版本号 如果没有，返回0
        let versionKey = "com.apple.SinaMicroBlog.version"
        let sandboxVersion = NSUserDefaults.standardUserDefaults().doubleForKey(versionKey)
        printLog("之前保存的版本 \(sandboxVersion)")
        
        // 3.保存当前的版本
        NSUserDefaults.standardUserDefaults().setDouble(bundleVersion, forKey: versionKey)
        
        // 4.比较两个版本
        return bundleVersion > sandboxVersion
    }
    
    private func setUpNetworkActivityIndicator() {
        
        //设置网络指示器，指示器只负责AFN网络请求，其他框架不负责
        AFNetworkActivityIndicatorManager.sharedManager().enabled = true
        
        //设置缓存大小 GET请求数据会被缓存
        //提示：URLSession只有dataTask会被缓存，downloadTask/uploadTask都不会缓存
        let cache = NSURLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 20 * 1024 * 1024, diskPath: nil)
        
        NSURLCache.setSharedURLCache(cache)
    }
    
    /// 设置导航栏和底部边栏的外观
    private func setUpAppearanceBarColor() {
        
        UINavigationBar.appearance().tintColor = UIColor.orangeColor()
        
        UITabBar.appearance().tintColor = UIColor.orangeColor()
    }

   

}

